1 IFAG=0THENAG=1:LOAD"C64 DIR.READER",8,1 2 DIR=49152 3 : 5 GOSUB51000 10 REM *** MACRO PROCESSOR *** 12 DIR=49152 30 N0$=CHR$(0):QUOTE$=CHR$(34):TRUE=1:FALSE=0:DIM PARM$(20) 40 GT$=CHR$(137):GS$=CHR$(141) 50 POKE53281,1:POKE53280,5:POKE646,0 55 PRINT"[147] [192][192][192][192][192][192][192] [194][193][211][201][195] [205]ACRO [208]ROCESSOR[146] [192][192][192][192][192][192]" 57 PRINT" BY [205]ICHAEL [204]EIDEL" 60 PRINT"[197]NTER NAME OF HOST PROGRAM (SOURCE FILE)"; 62 PRINT"<[208]RESS [210][197][212][213][210][206] FOR A DIRECTORY>" 63 PRINT"<[197]NTER '[209]' TO RETURN TO [204][207][193][196][211][212][193][210]>" 65 GOSUB61000 66 IFP$="DIR"ORP$="[196][201][210]"ORP$=""THEN62000 67 IFP$="Q"ORP$="QUIT"ORP$="[209][213][201][212]"THEN50000 70 PRINT"[208]ROCESSING..."P$:PRINT:MACRO=FALSE:CH=2 75 LI=11:POKE1,55:GOSUB63000 80 OPEN1,8,15:OPEN2,8,2,"0:"+P$+",P,R":INPUT#1,E,E$:IFE=0THEN100 90 CLOSE2:CLOSE1:PRINTE,E$:GOTO50000 100 OPEN3,8,3,"0:"+P$+".EXP,P,W":INPUT#1,E,E$:IFE=0THEN120 110 CLOSE3:PRINT#1,"S0:"+P$+".EXP":INPUT#1,E,E$,E:PRINTE$,E:GOTO 100 120 PRINT#3,CHR$(1);CHR$(8);:GOSUB240:GOSUB240 130 REM **** MAIN PROCESSING LOGIC **** 140 GOSUB240:D$=C$:GOSUB240:IFD$=N0$ANDC$=N0$THEN460 150 GOSUB260:GOSUB240 160 IF C$="[" THENGOSUB360:L$="":GOTO140 170 IF C$="!" THEN IF MACRO THEN GOSUB650:GOTO140 180 IF EXCLUDE OR C$=QUOTE$ THEN IF MACRO THEN GOSUB1210:GOTO140 190 IF C$="_" THEN IF MACRO THEN GOSUB1130 200 IF C$=GT$ORC$=GS$THEN IF MACRO THEN GOSUB 1480 210 L$=L$+C$:IF C$=N0$ THEN GOSUB300:L$="":GOTO140 220 GOSUB240:GOTO190 230 REM * CLOSED SUBROUTINES FOLLOW * 240 GET#CH,C$:IFC$=""THENC$=N0$ 250 RETURN 260 GET#CH,LN$,HN$:IFLN$=""THENLN$=N0$ 270 IF HN$=""THENHN$=N0$ 280 IF MACRO THEN LM=LM+1:IFLM>255THENHM=HM+1:LM=0 290 RETURN 300 IFW=0THENW=LEN(L$)+5:GOTO320 310 W=LEN(L$)+4 320 WT=WT+W:X=INT(WT/256):HP$=CHR$(X+8):X=(WT-(X*256)):LP$=CHR$(X) 330 IFMACROTHENLN$=CHR$(LM):HN$=CHR$(HM) 340 PRINT#3,LP$;HP$;LN$;HN$;L$;:RETURN 350 REM *** OPEN MACRO FILE *** 360 LF$="":L$="":IF MACRO THEN PRINT"[195]ANNOT NEST MACROS":GOTO780 370 GOSUB240:IFC$<>CHR$(34)THENPRINT#1,"I":PRINT"[205]ISSING QUOTES":GOTO 780 380 GOSUB240:IFC$=","THEN GOSUB490:PRINT:GOTO 410 390 IFC$=QUOTE$ THEN GOSUB240:GOSUB240:GOTO 410 400 LF$=LF$+C$:PRINTC$;:GOTO380 410 OPEN5,8,5,"0:"+LF$+",P,R":INPUT#1,E,E$:IFE=0THEN 430 420 PRINT"[147][198]ILE ERROR";E;LF$;E$:GOTO780 430 MACRO=TRUE:CH=5:GOSUB240:GOSUB240 440 LM=ASC(LN$):HM=ASC(HN$):MB=HM*256+LM 450 L$=CHR$(143)+" "+LF$+" MACRO"+N0$:GOSUB300:RETURN 460 IF MACRO THEN CLOSE5:MACRO=FALSE:CH=2:GOTO130 470 PRINT#3,CHR$(0);CHR$(0);:CLOSE2:CLOSE3:CLOSE1 480 PRINT"*** [208]ROCESSING COMPLETE ***":PRINT:GOTO50000 490 REM COLLECT PARAMETERS 500 FOR X=1TO20:PARM$(X)="":NEXTX:X=1 510 IF X>20 THEN 580 520 GOSUB 240 530 IF C$=N0$THENPRINT"[147][205]ISSING QUOTE IN MACRO LINE":GOTO780 540 IF C$=QUOTE$THEN 610 550 IF C$="," THEN X=X+1:GOTO 510 560 PARM$(X)=PARM$(X)+C$ 570 GOTO 510 580 IF X>20 THEN PC=20:GOTO 610 590 PC=X 600 REM 610 CHECKS FOR CLOSING ] NULL 610 GOSUB240:IFC$<>"]"THEN630 620 GOSUB240:IFC$=N0$ THEN RETURN 630 PRINT"[147] [201]NVALID MACRO SYNTAX":GOTO780 640 REM ** HANDLE MACRO DIRECTIVE ** 650 D1$="" 660 GOSUB240 670 IF C$=" "ORC$=N0$ THEN 700 680 D1$=D1$+C$ 690 GOTO660 700 IF ASC(D1$)=128THENEXCLUDE=FALSE:RETURN 710 IF LEN(D1$)=2 THENGOSUB820:RETURN 720 IF EXCLUDE THEN GOSUB 1220:RETURN 730 IF D1$="ERR[176]"THEN 1240 740 IF D1$="MESSAGE"THENGOSUB1310:RETURN 750 IF D1$="SET" THENGOSUB1370:RETURN 760 IF D1$="EXIT" OR D1$=CHR$(237) THEN CLOSE5:MACRO=FALSE:CH=2:RETURN 770 PRINT"[147]INVALID MACRO DIRECTIVE ";D1$:GOTO780 780 REM *** ABORT ROUTINE *** 790 IF MACRO THEN CLOSE5 800 CLOSE2:CLOSE3:CLOSE1:PRINT"[213]NABLE TO CONTINUE AT LINE "; 810 PRINT(ASC(HN$)*256)+ASC(LN$):PRINT:GOTO50000 820 REM * HANDLE CONDITIONAL DIR * 830 AGNBR=VAL(D1$) 840 IF AGNBR<0 OR AGNBR>20 THEN PRINT"[147][201]NVALID ARGUMENT NUMBER ";D1$:GOTO780 850 D2$="" 860 FOR X=1TO3:GOSUB240:D2$=D2$+C$:NEXT X 870 GOSUB240:GOSUB240 880 IF C$<>QUOTE$ THEN PRINT"[147][205]ISSING VALUE QUOTE ON !_#":GOTO780 890 D3$="" 900 GOSUB240:IFC$=N0$THENPRINT"[147][205]ISSING QUOTE ON !_#":GOTO780 910 IF C$<>QUOTE$THEND3$=D3$+C$:GOTO900 920 GOSUB240:REM GET LAST NULL 930 IF C$<>N0$ THEN PRINT"[147]INVALID CONDITIONAL LINE IN MACRO":GOTO780 940 IF D2$="EQL"THEN GOSUB1010:RETURN 950 IF D2$="LSS"THEN GOSUB1030:RETURN 960 IF D2$="GTR"THEN GOSUB1050:RETURN 970 IF D2$="LEQ"THEN GOSUB1070:RETURN 980 IF D2$="NEQ"THEN GOSUB1090:RETURN 990 IF D2$="GEQ"THEN GOSUB1110:RETURN 1000 PRINT"[147][201]NVALID CONDITIONAL OPERATOR ";D2$:GOTO780 1010 IF PARM$(AGNBR)=D3$ THEN EXCLUDE=0:RETURN 1020 EXCLUDE=1:RETURN 1030 IF PARM$(AGNBR)D3$ THEN EXCLUDE=0:RETURN 1060 EXCLUDE=1:RETURN 1070 IF PARM$(AGNBR)<=D3$ THENEXCLUDE=0:RETURN 1080 EXCLUDE=1:RETURN 1090 IF PARM$(AGNBR)<>D3$ THENEXCLUDE=0:RETURN 1100 EXCLUDE=1:RETURN 1110 IF PARM$(AGNBR)=>D3$ THENEXCLUDE=0:RETURN 1120 EXCLUDE=1:RETURN 1130 REM * HANDLE PARAMETER REPLACEMENT 1140 GOSUB240:D1$=C$:GOSUB240:D1$=D1$+C$ 1150 AGNBR=VAL(D1$) 1160 IF AGNBR<0 OR AGNBR>20 THEN PRINT"[147][201]NVALID ARGUMENT ";D1$:GOTO 780 1170 L$=L$+PARM$(AGNBR) 1180 GOSUB 240:REM GET BYTE AFTER [BACK ARROW]ARG 1190 RETURN 1200 REM * HANDLE MACRO COMMENT * 1210 GOSUB 240 1220 IF C$<>N0$ THEN 1210 1230 RETURN 1240 REM * HANDLE ERROR ABORT * 1250 E$="":GOSUB240:REM READ QUOTE 1260 GOSUB240:IFC$=QUOTE$THEN1290 1270 IFC$=N0$THEN1300 1280 E$=E$+C$:GOTO1260 1290 GOSUB240:REM READ NULL 1300 PRINT"[147]";E$:GOTO 780 1310 REM * HANDLE WARNING MSG * 1320 PRINT"[205]> "; 1330 GOSUB240:REM GET QUOTE 1340 GOSUB240:IFC$=QUOTE$THENGOSUB240:PRINT:RETURN 1350 IF C$=N0$ THEN PRINT:RETURN 1360 PRINT C$;:GOTO 1340 1370 REM * HANDLE SET DIRECTIVE * 1380 GOSUB240:D2$=C$:GOSUB240:D2$=D2$+C$ 1390 ARGNBR=VAL(D2$) 1400 IFARGNBR<1ORARGNBR>20THENPRINT"[147][201]NVALID ARGUMENT NUMBER ";D2$:GOTO780 1410 GOSUB240:GOSUB240 1415 IFC$<>QUOTE$THENPRINT"[147][205]ISSING QUOTE ON !SET":GOTO780 1420 D3$="" 1430 GOSUB240:IFC$=N0$THENPRINT"[147][205]ISSING QUOTE ON !SET":GOTO780 1440 IFC$<>QUOTE$THEND3$=D3$+C$:GOTO1430 1450 GOSUB240:REM GET LAST NULL 1460 PARM$(ARGNBR)=D3$ 1470 RETURN 1480 REM HANDLE MACRO BRANCH 1490 B$="":L$=L$+C$ 1500 GOSUB240:IFC$=" "THEN1500 1510 IFC$="#"THEN GOSUB 240:RETURN 1520 B$=B$+C$:GOSUB240 1530 IFC$=":"ORC$=N0$ORC$=","THEN1550 1540 GOTO1520 1550 BO=VAL(B$):B$=STR$(MB+BO) 1560 IFC$=N0$ORC$=":"THENL$=L$+B$:RETURN 1570 L$=L$+B$+C$:B$="":GOSUB240:GOTO1530 5000 : 50000 REM ERROR OR DONE 50005 PRINT 50010 PRINT" [208]RESS [[210][197][212][213][210][206]] TO COMPILE ANOTHER" 50012 PRINTSPC(17)"-OR-" 50014 PRINT" [208]RESS [[211][208][193][195][197]] TO RETURN TO [204][207][193][196][211][212][193][210]." 50020 POKE198,0:WAIT198,1:GETA$ 50030 IFA$=CHR$(13)THENRUN10 50040 IFA$=CHR$(32)THEN60000 50050 GOTO50020 50060 : 51000 PRINT"[147][144][176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"; 51005 FORA=1TO23:PRINT"[221]"SPC(38)"[221]";:NEXT 51010 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]":POKE53281,1 51015 POKE2023,125:POKE2023+54272,. 51020 PRINT"[204][207][193][196][211][212][193][210] [208]RESENTS:" 51030 PRINT"[194]ASIC [205]ACRO [208]ROCESSOR" 51040 PRINT"BY [205]ICHAEL [204]EIDEL" 51045 PRINT"(C) [195]OPYRIGHT 1987" 51050 PRINT"[144][208]RESS ANY KEY TO CONTINUE." 51060 POKE198,.:WAIT 198,1:GETA$ 51070 RETURN 59999 STOP 60000 PRINT 60001 PRINT" [193]RE YOU SURE YOU WANT TO QUIT" 60002 PRINT" AND RETURN TO [204][207][193][196][211][212][193][210]?" 60004 POKE198,0:WAIT198,1:GETA$ 60006 IFA$="N"ORA$="[206]"THEN50000 60008 IFA$="Y"ORA$="[217]"THEN60010 60009 GOTO60004 60010 POKE1,55 60020 OPEN15,8,15,"R0:HELLO CONNECT=HELLO CONNECT":INPUT#15,ER:CLOSE15 60030 IFER<>63THENEND 60040 LOAD "HELLO CONNECT",8 60050 : 61000 REM INPUT NAME 61002 P$="":LS=16:CR$="[164]" 61010 PRINT">"; 61020 PRINTCR$"[157]"; 61030 POKE198,0:WAIT198,1:GETA$ 61040 IFA$=CHR$(13)THENRETURN 61050 IFA$<>"[157]"ANDA$<>CHR$(20)THEN61060 61055 L=LEN(P$):IFL>0THENP$=LEFT$(P$,L-1):PRINT" [157][157] [157]";:GOTO61020 61057 GOTO61030 61060 FL=0:IF(A$>="A"ANDA$<="Z")OR(A$>="[193]"ANDA$<="[218]")ORA$=" "ORA$="."THENFL=1 61062 IFFL=0THENIF((A$>="0"ANDA$<="9"))ORA$="?"ORA$="*"ORA$="_"ORA$="^"THENFL=1 61064 IFFL=0THENIFA$=">"ORA$="<"ORA$="-"THENFL=1 61070 IFFL=0THEN61030 61080 IFLEN(P$)<>LSTHENP$=P$+A$:PRINTA$;:GOTO61020 61090 GOTO61030 62000 REM DIRECTORY 62002 LI=14:GOSUB63000 62008 PRINT" <[208]RESS [[211][208][193][195][197]] TO PAUSE> 62009 [153]"----------------------------------------"; 62010 [158]DIR 62020 [153]:[153][166]7)"(null)RESS [(null)VAL(null)(null)(null)(null)] TO CONTINUE" 62030 [146]197,64:[151]198,0:[146]198,1:[161]A$:[139]A$[179][177][199](13)[167]62030 62040 [151]1,55:[138]10 63000 [143] WINDOW STUFF 63002 [151]770,131:[151]771,164:[151]88,0:[151]89,192:[151]90,0:[151]91,192 63003 [151]781,33:[151]782,0:[158]41964 63004 [151]88,254:[151]89,255:[151]90,254:[151]91,255 63005 [151]781,33:[151]782,0:[158]41964 63007 [151]59639,LI:[151]1,53 63008 [142]